package com.xuecheng.system.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xuecheng.api.system.model.dto.CourseCategoryDTO;
import com.xuecheng.common.domain.code.CommonErrorCode;
import com.xuecheng.common.domain.response.RestResponse;
import com.xuecheng.system.convert.CourseCategoryConvert;
import com.xuecheng.system.entity.CourseCategory;
import com.xuecheng.system.entity.ex.CourseCategoryNode;
import com.xuecheng.system.mapper.CourseCategoryMapper;
import com.xuecheng.system.service.CourseCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.util.List;

/**
 * <p>
 * 课程分类 服务实现类
 * </p>
 *
 * @author itcast
 */
@Slf4j
@Service
public class CourseCategoryServiceImpl extends ServiceImpl<CourseCategoryMapper, CourseCategory> implements CourseCategoryService {

    /**
     * 返回课程分类树形数据
     *
     * @return List<CourseCategoryNode>
     */
    @Override
    public List<CourseCategoryDTO> queryTreeNodes() {
        // 1.调用 MP 的 Api 获得 Mapper
        CourseCategoryMapper baseMapper = this.getBaseMapper();
        // 2.调用自定义方法
        List<CourseCategoryNode> courseCategoryNodes = baseMapper.selectTreeNodes();
        //3. 将数据转为 DTO 数据
        List<CourseCategoryDTO> courseCategoryDTOS = CourseCategoryConvert.INSTANCE.nodes2dtos(courseCategoryNodes);

        return courseCategoryDTOS;
    }

    /**
     * 根据id查询课程分类信息
     *
     * @param id 课程id
     * @return 分类信息
     * <p>
     * ====业务分析====
     * 1.判断关键数据
     * 课程id,机构id
     * 2.判断业务数据
     * 课程分类信息是否存在
     */
    @Override
    public RestResponse<CourseCategoryDTO> get(String id) {
        //1.判断关键数据
        if (ObjectUtils.isEmpty(id)) {
            return RestResponse.validfail(CommonErrorCode.E_100101);
        }
        //判断业务数据
        //获取分类信息
        CourseCategory courseCategory = this.getById(id);
        if (ObjectUtils.isEmpty(courseCategory)) {
            return RestResponse.validfail(CommonErrorCode.E_100104);
        }
        //3.进行转换,返回结果数据
        CourseCategoryDTO dto = CourseCategoryConvert.INSTANCE.entity2dto(courseCategory);
        RestResponse<CourseCategoryDTO> response = RestResponse.success(dto);
        return response;
    }
}
